package xiegd.study.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Author: xieguangda
 * @Description:
 * @Date: 2023/9/21 15:29
 */
public class DynamicProxyExample {
    public static void main(String[] args) {
        // 创建一个动态代理实例
        MyInterface myProxy = (MyInterface) Proxy.newProxyInstance(
                MyInterface.class.getClassLoader(),
                new Class<?>[]{MyInterface.class},
                new MyInvocationHandler());

        // 调用代理对象的方法
        myProxy.doSomething();
        System.out.println(myProxy.toString()); // 应该是“Proxy toString”
    }
}

// 创建一个接口
interface MyInterface {
    void doSomething();
}


// 实现一个调用处理程序
class MyInvocationHandler implements InvocationHandler {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Handling method call: " + method.getName());
        if (method.getName().equals("toString")) {
            return "Proxy toString"; // 特殊处理toString方法
        }
        // 其他方法调用处理逻辑...
        return null; // 返回合适的值
    }
}
